home *** CD-ROM | disk | FTP | other *** search
/ The Java 3D API Specification (2nd Edition) / The Java 3D API Specification (2nd Edition).iso / programs / examples / AlternateAppearance / SphereGroup.java < prev   
Text File  |  2000-04-28  |  4KB  |  110 lines

  1. /*
  2.  *    @(#)SphereGroup.java 1.3 00/02/10 13:13:38
  3.  *
  4.  * Copyright (c) 1996-2000 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
  7.  * modify and redistribute this software in source and binary code form,
  8.  * provided that i) this copyright notice and license appear on all copies of
  9.  * the software; and ii) Licensee does not utilize the software in a manner
  10.  * which is disparaging to Sun.
  11.  *
  12.  * This software is provided "AS IS," without a warranty of any kind. ALL
  13.  * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
  14.  * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  15.  * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
  16.  * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
  17.  * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
  18.  * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
  19.  * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
  20.  * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
  21.  * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
  22.  * POSSIBILITY OF SUCH DAMAGES.
  23.  *
  24.  * This software is not designed or intended for use in on-line control of
  25.  * aircraft, air traffic, aircraft navigation or aircraft communications; or in
  26.  * the design, construction, operation or maintenance of any nuclear
  27.  * facility. Licensee represents and warrants that it will not use or
  28.  * redistribute the Software for such purposes.
  29.  */
  30.  
  31. import javax.media.j3d.*;
  32. import javax.vecmath.*;
  33. import com.sun.j3d.utils.geometry.*;
  34.  
  35. public class SphereGroup
  36.     extends Group
  37. {
  38.     Shape3D[] shapes;
  39.     int numShapes = 0;
  40.     //  Constructors
  41.     public SphereGroup( )
  42.     {
  43.         //    radius   x,y spacing   x,y count  appearance
  44.         this( 0.25f,   0.75f, 0.75f,   5, 5,      null, false );
  45.     }
  46.  
  47.     public SphereGroup( Appearance app )
  48.     {
  49.         //    radius   x,y spacing   x,y count  appearance
  50.         this( 0.25f,   0.75f, 0.75f,   5, 5,      app, false );
  51.     }
  52.  
  53.     public SphereGroup( float radius, float xSpacing, float ySpacing,
  54.         int xCount, int yCount, boolean overrideflag )
  55.     {
  56.         this( radius,  xSpacing, ySpacing, xCount, yCount, null, overrideflag );
  57.     }
  58.  
  59.     public SphereGroup( float radius, float xSpacing, float ySpacing,
  60.             int xCount, int yCount, Appearance app, boolean overrideflag )
  61.     {
  62.     if ( app == null )
  63.         {
  64.         app = new Appearance( );
  65.         Material material = new Material( );
  66.         material.setDiffuseColor( new Color3f( 0.8f, 0.8f, 0.8f ) );
  67.         material.setSpecularColor( new Color3f( 0.0f, 0.0f, 0.0f ) );
  68.         material.setShininess( 0.0f );
  69.         app.setMaterial( material );
  70.         }
  71.  
  72.     double xStart = -xSpacing * (double)(xCount-1) / 2.0;
  73.     double yStart = -ySpacing * (double)(yCount-1) / 2.0;
  74.  
  75.     Sphere sphere = null;
  76.     TransformGroup trans = null;
  77.     Transform3D t3d = new Transform3D( );
  78.     Vector3d vec = new Vector3d( );
  79.     double x, y = yStart, z = 0.0;
  80.     shapes = new Shape3D[xCount * yCount];
  81.     for ( int i = 0; i < yCount; i++ )
  82.         {
  83.         x = xStart;
  84.         for ( int j = 0; j < xCount; j++ ) {
  85.             vec.set( x, y, z );
  86.             t3d.setTranslation( vec );
  87.             trans = new TransformGroup( t3d );
  88.             addChild( trans );
  89.  
  90.             sphere = new Sphere(
  91.                     radius,     // sphere radius
  92.                     Primitive.GENERATE_NORMALS,  // generate normals
  93.                     16,         // 16 divisions radially
  94.                     app );      // it's appearance
  95.             trans.addChild( sphere );
  96.             x += xSpacing;
  97.             shapes[numShapes] = sphere.getShape();
  98.             if (overrideflag) 
  99.             shapes[numShapes].setCapability(Shape3D.ALLOW_APPEARANCE_OVERRIDE_WRITE);
  100.             numShapes++;
  101.         }
  102.         y += ySpacing;
  103.         }
  104.     }
  105.     Shape3D[] getShapes() {
  106.     return shapes;
  107.     }
  108.     
  109. }
  110.